# @Time : 2024-11-29 15:03
# @Author : Fioman 
# @Phone : 13149920693
"""
获取日期字符串的工具类,跟日期相关的操作在这个类中获取
"""
from datetime import datetime, timedelta


def get_datatime_now_str():
    """
    获取时间字符串
    :return:
    """
    return datetime.now().strftime("%Y%m%d%H%M%S")


def get_datetime_for_filename():
    """
    获取当前时间的时间格式字符串, "%Y-%m-%d %H-%M-%S" 格式字符串,用于标示文件名
    2025-01-16--16-52-35
    :return:
    """
    return datetime.now().strftime('%Y-%m-%d--%H-%M-%S')


def get_date_only():
    """
    只获取日期,格式为"2024-11-29"
    :return:
    """
    return datetime.now().strftime('%Y-%m-%d')


def str_to_datetime(dateStr):
    """
    将日期转换为日期字符串,比如将 "2024-11-29" 这样的日期转换为日期对象
    :param dateStr:
    :return:
    """
    return datetime.strptime(dateStr, '%Y-%m-%d')


def get_now_with_ms():
    """
    获取时间,带ms,其格式为"2024-09-30 14:23:45.123"
    %f表示六位数的微妙,然后通过切片,将后面的三位去除掉
    :return:
    """
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]


def get_now_str():
    """
    yy-mm-dd hh:mm:ss
    获取当前的日期时间字符串,常用格式 2024-09-30 14:23:45
    @return:
    """
    return datetime.now().strftime("%Y-%m-%d %H:%M:%S")


def get_group_number_int() -> int:
    """
    获取日期字符串的int类型,形如2025010617321514
    :return:
    """
    nowTime = datetime.now().strftime("%Y%m%d%H%M%S%f")[:-3]
    return int(nowTime)


# 获取是早班还是晚班
def get_shift_period(now=None):
    """判断当前时间所属班次及统计日期"""
    now = now or datetime.now()
    current_hour = now.hour
    current_date = now.date()

    if 8 <= current_hour < 20:
        shift_date = current_date
    else:
        shift_date = current_date if current_hour >= 20 else current_date - timedelta(days=1)

        # 转为指定格式字符串（默认ISO格式）
    return ("早班" if 8 <= current_hour < 20 else "晚班"), shift_date.strftime("%Y-%m-%d")


if __name__ == '__main__':
    print(get_group_number_int())
    print(get_datetime_for_filename())
    print(get_datatime_now_str())
